cmake_minimum_required(VERSION 2.8.3)
project(caros_sensor)

# ######################################################################################################################
# Local Variables
# ######################################################################################################################
set(library_name "${PROJECT_NAME}")
set(BUILD_WITH_RW_SUPPORT 1)
set(
    COMPONENT_LIST
    # cmake-format: sortable
    caros_common
    caros_common_msgs
    caros_sensor_msgs
    cv_bridge
    geometry_msgs
    image_geometry
    image_transport
    message_generation
    roslint
    sensor_msgs
    std_msgs
)

# ######################################################################################################################
# RobWork
# ######################################################################################################################
set(RW_ROOT "$ENV{RW_ROOT}")
# Include default settings for constructing a robwork dependent project
find_package(RobWork PATHS "${RW_ROOT}")

if(NOT ROBWORK_FOUND)
    message(WARNING "RobWork was not found caros_sensor will build with ROS support only!")
    set(BUILD_WITH_RW_SUPPORT 0)
else()
    set(COMPONENT_LIST ${COMPONENT_LIST} caros_common_robwork)
    list(SORT COMPONENT_LIST)
endif()

# ######################################################################################################################
# Catkin Packages
# ######################################################################################################################

find_package(catkin REQUIRED COMPONENTS ${COMPONENT_LIST})

# ######################################################################################################################
# Roslint
# ######################################################################################################################
set(ROSLINT_CPP_OPTS "--filter=-legal/copyright,-build/namespaces,-build/c++11")
roslint_cpp()

# ######################################################################################################################
# catkin specific configuration ##
# ######################################################################################################################
catkin_package(INCLUDE_DIRS include LIBRARIES ${library_name} CATKIN_DEPENDS ${COMPONENT_LIST} DEPENDS)

# ######################################################################################################################
# Build
# ######################################################################################################################
if(NOT BUILD_WITH_RW_SUPPORT)
    include_directories(include ${catkin_INCLUDE_DIRS})

    add_library(${library_name} src/camera_service_interface.cpp src/camera_si_proxy.cpp)

    add_dependencies(${library_name} caros_common caros_sensor_msgs_generate_messages_cpp)

    target_link_libraries(${library_name} ${catkin_LIBRARIES})
else()
    include_directories(include ${ROBWORK_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})

    add_library(
        ${library_name}
        src/button_sensor_service_interface.cpp
        src/button_sensor_si_proxy.cpp
        src/camera_service_interface.cpp
        src/camera_si_proxy.cpp
        src/ft_sensor_service_interface.cpp
        src/ft_sensor_si_proxy.cpp
        src/pose_sensor_service_interface.cpp
        src/pose_sensor_si_proxy.cpp
    )

    add_dependencies(
        ${library_name}
        caros_common
        caros_common_robwork
        caros_sensor_msgs_generate_messages_cpp
    )

    target_link_libraries(${library_name} ${catkin_LIBRARIES} ${ROBWORK_LIBRARIES})
endif()
